Computer systems are information processing systems which can be designed to give independent computing power to one user or a plurality of users. Computer systems may be found in many forms including, for example, mainframes, minicomputers, workstations, servers, personal, computers, and embedded systems. A computer system processes information according to a program and produces resultant output information via input/output (I/O) devices. A program is a list of internally stored instructions such as a particular application program and/or an operating system.
A process is the execution of a program and consists of patterns of bytes that the CPU interprets as machine instructions (called “text”), data and stack. Many processes appear to execute simultaneously as the kernel schedules them for execution and several processes may be instances of one program. A process executes by following a strict sequence of instructions that is self-contained and does not jump to that of another process; it reads and writes its data and stack sections, but it cannot read or write the data and stack of other processes. Processes communicate with other processes and with the rest of the world via system calls.
A process on a UNIX system is the entity that is created by a fork system call. Every process except process 0 is created when another process executes the fork system call. The process that invokes the fork system call is called the parent process and the newly created process is the child process. Every process has one parent process, but a process may have many child processes. The operating system kernel identifies each process by its process number, called the process id (PID). Process 0 is a special process that is created “by hand” when the system boots; after forking a child process (process 1), process 0 becomes the swapper process. Process 1, also known as init, is the ancestor of every other process in the system and enjoys a special relationship with them.
Under UNIX, or other UNIX like environments, such as AIX, when a user logs into a system and executes a process, the initiated process and all of its child processes, if any, are associated with a particular console. The console may be a physical console, for example, a physical terminal (tty) device, or a virtual console if the system is a Logical Partitioning (LPAR) system, or a pseudo tty, for example, pts/1, if the user remotely logs into the system, for example, via telnet, rlogin, ssh, etc. In the event that the user places the process in the background and proceeds to exit the console or pseudo tty from which the process was originally initiated, the process and all its child processes will continue to execute but will not be associated with any particular console or pseudo tty. For example, under the AIX operating system environment, if a process is not associated with any particular console or pseudo tty, executing the “ps ef” command to list all running processes will result in the TTY entry being shown as “-” for the process.
In many situations and, in particular, when performing system software tests, the running processes are required to be associated with a console or pseudo tty at all times during the test period. For example, the process of testing the “ps-t” command requires a console or pseudo tty to be presenting at all time during the testing session. Additionally, a user may want to initiate the processes in the background from a remotely login terminal and then proceeds to exit the remote terminal so that the processes will not be interrupted by any action executed at that particular remote terminal. Thus, what is needed in the art is for the running process to be able to be disassociated from the physical console or pseudo tty device that originally initiated the running process while still maintaining an association with a tty device.